#include "stdio.h"
#include "stdlib.h"

#define Maxsize 5

typedef int datatype;
//栈的顺序存储 结构
typedef struct Stack
{
	datatype *top;
	datatype *bottom;
	int stacksize;
} seqstack;
//栈的链式存储结构
typedef struct node
{
	datatype data;
	struct node *next;
} linkstack;

//顺序存储
void initseqstack(seqstack &s)
{
	s.bottom = (datatype *)malloc(Maxsize * sizeof(datatype));
	if (!s.bottom)
	{
		exit(0);
	}
	s.top = s.bottom;
	s.stacksize = Maxsize;
}

//进栈
void push(seqstack &s, datatype x)
{
	if (s.top - s.bottom >= s.stacksize)
	{
		s.bottom = (datatype *)realloc(s.bottom, sizeof(datatype) * (s.stacksize + 10));
		if (!s.bottom)
		{
			printf("进栈失败");
			exit(0);
		}
		s.top = s.bottom + s.stacksize;
		s.stacksize += 10;
	}

	else
	{
		*s.top = x;
		s.top++;
		printf(" %d\n", x);
	}
}
//出栈
void pop(seqstack &s, datatype &x)
{
	if (s.top == s.bottom)
	{
		printf("栈空");
	}
	else
	{

		s.top--;
		x = *s.top;
		printf("成功出栈 %d", x);
	}
}

//链式存储
void initlinkstack(linkstack *l)
{
	l = (linkstack *)malloc(sizeof(node));
	l->next = NULL;
}

void main()
{
	seqstack s;
	linkstack *l;

	datatype x;
	initseqstack(s);
	for (int i = 0; i < 65; i++)
	{
		push(s, i);
	}
	pop(s, x);
	initlinkstack(l);
}
